草庐IT

c++ - gcc 和 libstdc++ 向前兼容

全部标签

c++ - GCC 4.4/4.5 unique_ptr 不适用于 unordered_set/unordered_map

有什么地方可以确认吗?我不确定是GCC的问题还是我的代码的问题。例如,以下代码无法编译:#include#includeusingnamespacestd;intmain(){unordered_set>s;unique_ptrp(newint(0));s.insert(move(p));return0;}错误信息太大,我不想放在这里。GCC版本为4.5.3,编译标志为-std=gnu++0x。也在4.4.5上测试过。 最佳答案 GCC4.6.1按原样接受您的代码,我认为它没有任何问题(即关联容器的value_type必须是Empl

MKD(Keil5)安装及环境配置—兼容C51和stm32

1概述C51单片机程序开发和编译环境通常是在keil3、keil4,而学习stm32后开发编译环境更多的是使用keil5也就是MDK;使用两个软件比较繁琐、臃肿,那么如何只安装一个keil,就可以同时开发编译C51和stm32成为了值得考虑的问题。2软件下载及安装步骤2.1MDK和C51软件下载步骤1:进入keil官方网站https://www.keil.com/,然后按照下图所示步骤,下载MDK-Arm和C51;步骤2:下载之前需要填写个人信息(如下图所示),信息没有准确性验证,可以随便填,然后Submit提交。步骤3:点击此处下载最新版本MDK。C51下载同理。2.2软件安装先安装MDK,

c++ - 纯虚函数和二进制兼容性

现在,我知道向非叶类添加新的虚函数通常是不好的,因为它破坏了任何尚未重新编译的派生类的二进制兼容性。但是,我的情况略有不同:我有一个接口(interface)类和实现类编译成一个共享库,例如:classInterface{public:staticInterface*giveMeImplPtr();...virtualvoidFoo(uint16_targ)=0;...}classImpl{public:...voidFoo(uint16_targ);....}我的主要应用程序使用这个共享库,基本上可以写成:Interface*foo=Implementation::giveMeImp

c++ - 将 gcc 属性与 C++11 属性语法一起使用

我正在尝试使用GCCattributes与C++11syntax.例如这样的事情:staticvoid[[used]]foo(void){//...}但我得到以下信息:warning:‘used’attributeignored[-Wattributes]staticvoid[[used]]foo(void)^为什么该属性被忽略?是否可以将GCC属性用作C++属性? 最佳答案 [[gnu::used]]staticvoidfoo(void){}首先,属性只能出现在特定的地方,否则你会得到:x.cc:1:13:warning:attr

c++ - 前向声明产生不兼容的类型错误

我一直在阅读一些关于前向声明(forwarddeclaration)的内容,包括在本论坛中。他们都说这样可以避免包含头文件,但是下面的代码会产生错误:#ifndefCLASSA_H_#defineCLASSA_H_classB;classA{public:A();~A();intgetCount();private:staticint_count;int_num;B_b1;//ERROR};编译器说:A.h:23:错误:字段“_b1”的类型不完整我注意到如果我制作B*类型的_b1问题就解决了。那么前向声明是否只适用于指针类型?如果我想让A持有B对象,我必须#inlcude"B.h"?谢

c++ - 一个元素的结构是否与元素本身兼容?

如果我有以下结构:structFoo{inta;};下面的代码是否符合C++标准?我的意思是,它不能生成“未定义的行为”吗?Foofoo;intifoo;foo=*reinterpret_cast(&ifoo);voidbar(intvalue);bar(*reinterpret_cast(&foo));autofptr=static_cast(&bar);fptr(foo); 最佳答案 N3290中的9.2/20Apointertoastandard-layoutstructobject,suitablyconvertedusin

如何制作零兼容的完整处理程序?

我创建了一个使用完整处理程序的函数。有时我需要使用完成块,有时不使用。这是功能:funcnumberCheck(number:String,completion:@escaping(Bool)->()){//sometaskdoherecompletion(true)}利用:numberCheck(number:"77",completion:{_in//sometaskdohere})但是我想让它完成零件零:numberCheck(number:"77",completion:nil)但这给了我一个错误:nil与预期参数类型'(bool)->()'看答案闭合可选funcnumberCh

c++ - 如何为忘记的返回语句打开 gcc 警告?

如何为忘记的返回语句打开gcc警告?它应该在以下情况下警告我:intfoo(){std::cout我知道-Wall会打开该警告,但它会启用太多其他警告。 最佳答案 根据gcc的onlinedocumentation,-Wall打开:-Waddress-Warray-bounds(onlywith-O2)-Wc++0x-compat-Wchar-subscripts-Wenum-compare(inC/Objc;thisisonbydefaultinC++)-Wimplicit-int(CandObjective-Conly)-Wim

c++ - 使用 GCC 和 C++11 实现类型 "long double"

我尝试搜索有关longdouble的信息,到目前为止,我了解到编译器对它的实现有所不同。在Ubuntu(XUbuntu)Linux12.10上使用GCC时,我得到了这个:doublePId=acos(-1);longdoublePIl=acos(-1);std::cout.precision(100);std::cout输出:PId8:3.141592653589793115997963468544185161590576171875PIl16:3.141592653589793115997963468544185161590576171875有人明白为什么他们输出(几乎)相同的东西吗

c++ - 为什么在 GCC/C++ 中弹出 "pragma GCC diagnostic push"警告?

#pragmaGCCdiagnosticpushitpop:warning:expected[error|warning|ignored]afterâ#pragmaGCCdiagnosticâ为什么?我在Linux中使用GCC。我有一个问题,如果我不能使用pop/push,忽略只影响编译的cpp,而不影响其他cpp?如果其他一些包括上限,是否影响它? 最佳答案 #pragmaGCCdiagnosticpush和#pragmaGCCdiagnosticpop是addedingcc4.6.您使用的是旧版本。这些pragma通常与其他#p